#include "script.h"
#include <random>
#include <iostream>
#include <string>
#include <ctime>

#pragma warning(disable : 4244 4305) // double <-> float conversions

bool ready = false;
bool stop = false;
float x, y, z;
float prev;
Vehicle tankVeh;
Ped driver;
bool clear = false;

void update()
{
	Player player = PLAYER::PLAYER_ID();
	Ped playerPed = PLAYER::PLAYER_PED_ID();
	Vehicle veh = PED::GET_VEHICLE_PED_IS_USING(playerPed);
	Vector3 position = ENTITY::GET_ENTITY_COORDS(playerPed, 1);
	Vector3 tankPos = ENTITY::GET_ENTITY_COORDS(tankVeh, 1);
	Vector3 spawn;
	char f = ENTITY::GET_ENTITY_MODEL(veh);
	DWORD hash = GAMEPLAY::GET_HASH_KEY(&f);
	DWORD tank = GAMEPLAY::GET_HASH_KEY("rhino");
	Ped driverModel = GAMEPLAY::GET_HASH_KEY("S_M_Y_Marine_03");
	int tankDist = GAMEPLAY::GET_DISTANCE_BETWEEN_COORDS(tankPos.x, tankPos.y, tankPos.z, position.x, position.y, position.z, 0);
	

	if (PLAYER::GET_PLAYER_WANTED_LEVEL(player) == 5 && !VEHICLE::IS_THIS_MODEL_A_BOAT(hash) && !VEHICLE::IS_THIS_MODEL_A_HELI(hash) && !VEHICLE::IS_THIS_MODEL_A_PLANE(hash))
	{
		y = 20 + 300;
		y = 20 + 300;
		z = rand() % 50;

		spawn = ENTITY::GET_OFFSET_FROM_ENTITY_IN_WORLD_COORDS(playerPed, x, y, -5.0);

		while (PATHFIND::IS_POINT_ON_ROAD(spawn.x, spawn.y, spawn.z, 0) == false && ready == false)
		{
			y = 20 + 200;
			y = 20 + 200;
			z = rand() % 50;
			spawn = ENTITY::GET_OFFSET_FROM_ENTITY_IN_WORLD_COORDS(playerPed, x, y, 0.0);
			WAIT(0);
		}
		if (PATHFIND::IS_POINT_ON_ROAD(spawn.x, spawn.y, spawn.z, 0) && ready == false)
		{
			STREAMING::REQUEST_MODEL(tank);
			while (!STREAMING::HAS_MODEL_LOADED(tank))
				WAIT(0);
			tankVeh = VEHICLE::CREATE_VEHICLE(tank, spawn.x, spawn.y, spawn.z, 0.0f, 0, 0);
			Vector3 tankSpawnPos = ENTITY::GET_ENTITY_COORDS(tankVeh, 1);
			float height = ENTITY::GET_ENTITY_HEIGHT_ABOVE_GROUND(tankVeh);
			if (height > 2)
			{
				ENTITY::SET_ENTITY_COORDS_NO_OFFSET(tankVeh, spawn.x, spawn.y, (tankSpawnPos.z - height) + 3.0f, 0, 0, 1);
			}
			if (PED::IS_PED_IN_VEHICLE(playerPed, veh, 1))
			{
				ENTITY::SET_ENTITY_HEADING(tankVeh, ENTITY::GET_ENTITY_HEADING(playerPed) - 180.0f);
			}
			VEHICLE::SET_VEHICLE_ON_GROUND_PROPERLY(tankVeh);
			STREAMING::REQUEST_MODEL(driverModel);
			while (!STREAMING::HAS_MODEL_LOADED(driverModel))
				WAIT(0);
			driver = PED::CREATE_PED_INSIDE_VEHICLE(tankVeh, 26, driverModel, -1, false, false);
			PED::SET_PED_RELATIONSHIP_GROUP_HASH(driver, GAMEPLAY::GET_HASH_KEY("cop"));
			AI::TASK_VEHICLE_CHASE(driver, playerPed);
			WAIT(50);
			ready = true;
		}
		if (ready == true && stop == false)
		{
			//UI::ADD_BLIP_FOR_ENTITY(driver);
			stop = true;
		}
	}
	WAIT(10);
	if (ready == true && stop == true)
	{
		if (tankDist > 1000)
		{
			ENTITY::SET_PED_AS_NO_LONGER_NEEDED(&driver);
			ENTITY::SET_VEHICLE_AS_NO_LONGER_NEEDED(&tankVeh);
			ready = false;
			stop = false;
			if (PED::IS_PED_IN_VEHICLE(playerPed, veh, 1))
				WAIT(7000);
			else
				WAIT(3000);
		}
		if (!VEHICLE::IS_VEHICLE_DRIVEABLE(tankVeh, 0))
		{
			ENTITY::SET_PED_AS_NO_LONGER_NEEDED(&driver);
			ENTITY::SET_VEHICLE_AS_NO_LONGER_NEEDED(&tankVeh);
			ready = false;
			stop = false;
			if (PED::IS_PED_IN_VEHICLE(playerPed, veh, 1))
				WAIT(7000);
			else
				WAIT(3000);
		}
	}
	while (PLAYER::IS_PLAYER_DEAD(player))
	{
		WAIT(7950);
		if (PLAYER::IS_PLAYER_DEAD(player))
		{
			ENTITY::DELETE_ENTITY(&tankVeh);
			PED::DELETE_PED(&driver);
			GAMEPLAY::CLEAR_AREA(position.x, position.y, position.z, 1000.0f, 1, 1, 1, 1);
		}
	}
}

void main()
{
	while (true)
	{
		update();
		WAIT(0);
	}
}

void ScriptMain()
{
	srand(GetTickCount());
	main();
}

